/** * 
 * 题目1： 解析Cookie字符串转化为对象 * 输入：'foo=bar; equation=E%3Dmc%5E2' * 输出：{ foo: 'bar', equation: 'E=mc^2' } * 
 * 测试: parseCookie('foo=bar; equation=E%3Dmc%5E2') */
 function parseCookie(str) { 
    let obj = {}
    let arr = str.split(';');
    for ( let i of arr) {
        const [ key , value ] = i.split("=");
        obj[key] = decodeURIComponent(value);
    }
    return obj;
 }

// console.log(parseCookie('foo=bar; equation=E%3Dmc%5E2'))
/** * 
 * 题目2： 找出对象中符合要求的项 * 输入： 原始对象：{ a: 1, b: '2', c: 3 }， 
 * 筛选条件：x => typeof x === 'string' * 输出：{ 'b': '2' } * 
 * 测试: pickBy({ a: 1, b: '2', c: 3 }, x => typeof x === 'string') */ 

function pickBy(obj, fn) { 
    let reulst = {} //存放结果的
    for(let i in obj){
        if(fn(obj[i])){
            reulst[i] = obj[i]
        }
    }
    return reulst;
}
// console.log(pickBy({ a: 1, b: '2', c: "3" }, x => typeof x === 'string'))
/** * 
 * 题目3：合并多个对象 * 
 * 输入：{ a: [1,2,3], b: { name: 'b'} }, { a: [4], b: { age: 18 } } * 输出：{ a: [1,2,3,4], b:{name:'b', age: 18}} * 
 * 测试: merge({ a: [1,2,3], b: { name: 'b'} }, { a: [4], b: { age: 18 } }) */ 
let a = { 
    a: [1,2,3], 
    b: { name: 'b'} 
} 
 let b =  { 
    a: [4], 
    b: { age: 18 } 
}
function merge(...objs) {
    const reulst = {}
    console.log(objs)
    objs.forEach(item=>{
        for(let i in item){
            //需要先判断是不是数组
            if(Array.isArray(item[i])&& Array.isArray(reulst[i])){
                reulst[i] = reulst[i].concat(item[i])
            }else if(typeof item[i] === 'object'&& !Array.isArray(item[i])){
                //不是数组是对象的时候 需要递归处理是不是还有数组
                reulst[i] = merge(reulst[i],item[i])
            }else {
                reulst[i] = item[i]
            }
        }
    })
    return reulst;
}

console.log( merge({ a: [1,2,3], b: { name: 'b'} }, { a: [4], b: { age: 18 } }))